package com.qf.ssm.utlis;

import org.apache.commons.io.IOUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.UUID;

/**
 * @author 黄梓濠
 * @Create 2024-01-03-20:40
 */
public class FilesUtils {
    public  static String fileUpload(HttpServletRequest request,MultipartFile[] file) throws IOException {
        //在项目根目录下获取有一个upload文件夹，将上传的文件放到该目录下
        //获取上传文件的目录路径
        String upload = request.getServletContext().getRealPath("upload");
        //判断是否有文件夹 没有则创建
        File dir = new File(upload);
        if (!dir.exists()){
            dir.mkdirs(); //创建目录
        }
        System.out.println("upload"+upload);//查看日志
        //定义集合存储文件名称
        StringBuffer stringBuffer = new StringBuffer();
        //获取文件源上传名字
        for (MultipartFile files:file){
            if (!files.isEmpty()){
                String originalFilename = files.getOriginalFilename();
                System.out.println("originalFilename"+originalFilename);
                //随机生成一个字符串作为新的文件名称
                String filename = UUID.randomUUID().toString();
                //获取文件上传的后缀名字
                String suffix = "";
                int beginIndex = originalFilename.lastIndexOf(".");
                if (beginIndex>0){
                    suffix = originalFilename.substring(beginIndex);
                }
                //得到文件完整名称
                String fullFileName = filename + suffix;
                //创建文件保存路径
                File file1 = new File(dir,fullFileName);
                //将上传文件保存到此文件中
                files.transferTo(file1);
                stringBuffer.append(fullFileName);
                stringBuffer.append(";");
            }
        }
        String fullFileNameList = stringBuffer.toString();
        return fullFileNameList;
    }

    public static void download(String filenames, HttpSession session, HttpServletResponse response) throws IOException {
        //得到文件名数组
        String[] filenameList = filenames.split(";");
        for (String filename:filenameList){
            System.out.println(filename);
            //获取到资源文件目录
            String path = session.getServletContext().getRealPath("upload");
            //被下载的文件的完整路径访问名称
            String realPath = path + File.separator + filename;
            //设置响应头的消息，表示响应给你的数据要以附件的信息保存（以文件形式存储）
            response.setHeader("content-disposition","attachment;filename="+filename);
            //IOUtils.copy：表示将一个输入流写出到指定的输出流中
            //参数1：表示目标文件中的输入流数据
            //参数2：表示将目标文件以输出流响应response（response会把这个数据响应给客户端）
            IOUtils.copy(new FileInputStream(realPath),response.getOutputStream());
        }
    }

}
